package eu.hellek.gba.server.TaskQueue;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.Pattern;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskOptions;
import eu.hellek.gba.server.utils.Utils;
public class RemoteServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
service(req, resp);
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
service(req, resp);
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.err.println("RemoteServlet called");
PrintWriter out = resp.getWriter();
out.println("Success");
ObjectInputStream ois = new ObjectInputStream(req.getInputStream());
try {
String obj = (String)ois.readObject();
// System.out.println(obj);
String secretCode = obj.substring(0, 31);
// TODO
if(secretCode.equals("replace me")) {
String action = obj.substring(31, 32);
if(action.equals("a")) {
String data = obj.substring(32);
String[] parts = data.split(Pattern.quote(","));
if(parts[2].equals("bus")) {
Queue queue = QueueFactory.getQueue("mydefault");
AddLineTask dTask = new AddLineTask(data);
queue.add(TaskOptions.Builder.withDefaults().payload(dTask));
} else if(parts[2].equals("subte") || parts[2].equals("tren")) {
Queue queue = QueueFactory.getQueue("addTrain");
AddTrainTask dTask = new AddTrainTask(data);
queue.add(TaskOptions.Builder.withDefaults().payload(dTask));
}
} else if(action.equals("d")) {
Queue queue = QueueFactory.getQueue("highspeed");
for(int i = 0; i < 20000; i = i + 1000) {
SomethingTask dTask = new SomethingTask(i);
queue.add(TaskOptions.Builder.withDefaults().payload(dTask));
}
/*
Queue queue = QueueFactory.getQueue("deleteLine");
String[] lines = new String[] { "21", "28" , "36", "4", "42", "51", "57", "8", "61", "62", "79" };
Objectify ofy = Dao.getInstance().getObjectify();
for(String line : lines) {
Query<Line> q = ofy.query(Line.class).filter("linenum", line);
List<Key<Line>> keys = q.listKeys();
for(Key<Line> k : keys) {
DeleteLineTask dTask = new DeleteLineTask("" + k.getId());
queue.add(TaskOptions.Builder.withDefaults().payload(dTask));
}
}*/
}
} else {
Logger.getLogger("RemoteServlet").log(Level.SEVERE, "Somebody tried to access with wrong code: " + req.getRemoteAddr());
Utils.eMailError(new Exception("Somebody tried to access with wrong code: " + req.getRemoteAddr()), "RemoteServlet");
}
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
}